package utils

import (
	"strings"
)

// 将带有连接符的字符串转换成大驼峰
// 比如：t_apple_background_color => AppleBackgroundColor，_为连接符，t_为前缀
func ToHump(s string, pre string, split string) string {
	s = DelPre(s, pre)
	// 没有配置分隔，则直接将第一个字母大写就ok
	if split == "" {
		return wordTrans(s)
	}
	// 配置了分隔符
	var builder strings.Builder
	// 切割成切片数组
	slice := strings.Split(s, split)
	for _, item := range slice {
		// 转换并拼接
		builder.WriteString(wordTrans(item))
	}
	return builder.String()
}

func DelPre(s string, pre string) string {
	// 先转换成小写
	s = strings.ToLower(s)
	// 如果配置了前缀且匹配
	if pre != "" && strings.HasPrefix(s, pre) {
		// 去掉前缀
		s = s[len(pre):]
	}
	return s
}

func wordTrans(str string) string {
	if len(str) < 1 {
		return ""
	}
	str = strings.ToLower(str)
	// 如果包含特殊单词，直接返回特殊单词
	for _, upper := range upperWordSlice {
		if str == strings.ToLower(upper) {
			return upper
		}
	}

	// 不包含，则第一个字母由小写转为大写
	strRune := []rune(str)
	if strRune[0] >= 97 && strRune[0] <= 122 {
		strRune[0] -= 32
	}
	return string(strRune)
}

var upperWordSlice = []string{
	"ID",
	"URL",
	"IP",
}
